package com.itcast.homework05.work08;

import java.util.Comparator;

/*
个工具类MyArrays可以对任意类型的数组进行排序
(1) 请说明泛型在此时的作用
(2) 请完成方法体的编写要求使用冒泡排序编写
(3) 请完成方法体的编写要求使用选择排序编写
*/
public class MyArrays {
    /*泛型让该方法更灵活, 调用者可以传入任何引用类型的数组都支持, 提高了方法扩展性
比较器的比较规则是抽象的, 可以让用户自己决定比较规则*/
    /**
     * 冒泡排序
     * @param arr
     * @param comparator
     * @param <T>
     */
    public static <T> void sort(T[] arr, Comparator<T> comparator) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                int compare = comparator.compare(arr[j], arr[j + 1]);
                if (compare > 0) {
                    T temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

    public static <T> void sort1(T[] arr, Comparator<T> comparator) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i+1; j < arr.length; j++) {
                int compare = comparator.compare(arr[i], arr[j]);
                if (compare > 0) {
                    T temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }
}
